// 一般接口命都是I开头，使用大驼峰命名规则
interface IGoods {
    // name: 字符串类型
    name: string,
    // getPrice: 价格，函数返回数值类型
    getPrice: () => number,
}

// 声明了接口之后，可以定义出实现了该接口的对象
let tank: IGoods = {
    name: "T30",
    getPrice() {
        return 100;
    }
}

// 接口也是一种数据类型，可以用于方法的参数
function sell(goods: IGoods) {
    console.log(`超市卖了：${goods.name}，售价：${goods.getPrice()}`);
}

// 甚至可以返回接口类型
// 鸭子类型：面向接口语言特点
// 如果一个对象，能够像鸭子一样叫，鸭子一样走，那么它就是鸭子
// 如果一个对象具有接口中所有定义属性/方法的实现，那么它就是该接口的对象
function createGoods(name: string, price: number): IGoods {
    return {
        name,
        getPrice: () => price
    }
}

sell(tank);
sell(createGoods("飞机", 200))